------------------------------------------------------------------------
-- FOR 数据库监控工具 V3
-- ** 与V1不兼容 **
-- ** 与V2不兼容 **
-- ** 发展成个人专用通用数据 **
-- ** 生成MODEL后再将所有DATETIME改为BIGINT
-- 注意, 此文件应该初始化后就不再直接修改而应该是在后续文件中修改!
-- 数据库前缀:d(dt_id)
-- 以下内容估计是每个项目的初始化SQL都要带上了
-- 前缀分配:
-- c 个人使用,所有项目共用的
-- d 个人使用,数据库监控工具相关
-- i
-- j
-- k 与公司一致,RFID相关
-- q
-- u
-- w
-- y
-- FOR V4 2019-11-22 改为项目:wstar
------------------------------------------------------------------------

--
-- 数据库: DBMonitorServer3
--
--USE DBMonitorServer3
--GO
-- 改为使用个人通用数据库wardyan
-- 2019-11-12 改为项目:wstar
USE wstar
GO

-- ** 先所有项目通用的 需要独立出去

-- ID表, 用于客户端上报数据的取ID
-- 主表  从表  *非主从表
-- 最后编辑:2019-10-31
CREATE TABLE dbo.ct_id(
		sID				INT NOT NULL,
		xName			NVARCHAR(200) NOT NULL,
		xValue			INT NOT NULL,
		--
		-- 主表通用
		sCreateTime  DATETIME NOT NULL,
		sLastUpdate		DATETIME NOT NULL,
		sVersion  INT NOT NULL,
		CONSTRAINT pk_ct_id PRIMARY KEY CLUSTERED (sID),
		INDEX idx_ct_id_xName NONCLUSTERED (xName)
) ON [PRIMARY]

GO



















GO

-- 管理用户表
-- 后台登录用户
-- *主表  从表  非主从表
-- 暂不考虑权限, 暂不分客户
-- 最后编辑:2019-10-31
-- 2019-11-22 改为ct,原来是dt
CREATE TABLE dbo.ct_admin(
		sID				INT NOT NULL,
		-- 
		xName			NVARCHAR(32) NOT NULL,		-- 显示名称
		xAccount		NVARCHAR(32) NOT NULL,		-- 账号
		xPassword		CHAR(32) NOT NULL,			-- 密码 MD5加密的
		-- 主表通用
		sCreateTime		DATETIME NOT NULL,			
		sLastUpdate		DATETIME NOT NULL,
		sVersion		INT NOT NULL,
		CONSTRAINT pk_ct_admin PRIMARY KEY CLUSTERED (sID),
		INDEX idx_ct_admin_xname NONCLUSTERED (xName)
) ON [PRIMARY]

GO

INSERT INTO dbo.ct_id (sID, xName, xValue, sCreateTime, sLastUpdate, sVersion) VALUES (2, N'ct_admin', 1, GETDATE(), GETDATE(), 1)
GO


-- 客户表
-- *主表  从表  非主从表
-- 最后编辑:2019-10-31
-- 2019-11-22 改为ct,并且拆分出经常更新的栏位
CREATE TABLE dbo.ct_customer(
		sID				INT NOT NULL,
		-- 
		xName			NVARCHAR(32) NOT NULL,		-- 名称
		xKey			NVARCHAR(64) NOT NULL,		-- 密钥 FRO AES
		xClientVersion	NVARCHAR(32),		-- 客户端版本
		-- xIsSynced		INT,				-- 是否已同步到客户端
		-- 客户设定
		xIsFunc			INT,				-- 功能开关,  总开关, 是否启用功能	-- 如果=0,则不会发布任务任务给这个客户端
		xIsHeartbeat	INT,				-- 是否启用心跳  ** 这是必须启用的, 否则就不能获取任务
		--xIsDaily		INT,				-- 是否启用一天一次的任务
		--xIsInterval		INT,				-- 是否启用定时任务(几分钟~几小时的任务)
		xIsInterval1	INT,				-- 是否启用type=1的任务,下同
		xIsInterval2	INT,
		xIsInterval3	INT,
		xIsInterval4	INT,
		xIsInterval5	INT,
		xIsInterval6	INT,
		xIsInterval7	INT,
		xIsInterval8	INT,
		xIsInterval9	INT,
		xIsAutoKill		INT,				-- 是否自动KILL掉卡死线程
		xIsAutoManage	INT,				-- 是否启用自动执行更新索引等管理任务
		--
		xHeartbeatInterval	INT,			-- 心跳间隔, 单位毫秒
		xHeartbeatOuttime	INT,			-- 心跳超时, 单位毫秒
		-- 备用 . 使用INT一定程度上取代BIT
		xIsInterval10	INT,
		xIsInterval11	INT,
		xIsInterval12	INT,
		xIsInterval13	INT,
		xIsInterval14	INT,
		xIsInterval15	INT,
		xIsInterval16	INT,
		xIsInterval17	INT,
		xIsInterval18	INT,
		xIsInterval19	INT,
		-- 主表通用
		sCreateTime  DATETIME NOT NULL,			
		sLastUpdate		DATETIME NOT NULL,
		sVersion  INT NOT NULL,
		-- 以下是经常更新的
		/**
		xLastHeartbeatTime	DATETIME NOT NULL,			-- 上次心跳时间
		xNextHeartbeatTime	DATETIME NOT NULL,			-- 下次心跳时间
		--
		xLastDailyTime		DATETIME NOT NULL,		-- 每天一次任务的最后时间  -- 两次每天一次定时任务时间间隔不能小于6小时
		xLastIntervalTime	DATETIME NOT NULL,		-- 最后定时任务的时间
		--
		xLastCmd		NVARCHAR(MAX),		-- 最后一次命令
		xLastCmdTime	DATETIME NOT NULL,			-- 最后命令时间
		xNextCmdTime	DATETIME NOT NULL,			-- 下次命令时间, 不能早于这个时间
		*/
		CONSTRAINT pk_ct_customer PRIMARY KEY CLUSTERED (sID)
		-- ,
		--INDEX idx_dt_customer_sid NONCLUSTERED (sID) INCLUDE(xKey)
) ON [PRIMARY]

GO
CREATE UNIQUE INDEX idx_ct_customer_sid ON dbo.ct_customer (sID) INCLUDE (xKey)
GO

INSERT INTO dbo.ct_id (sID, xName, xValue, sCreateTime, sLastUpdate, sVersion) VALUES (3, N'ct_customer', 1, GETDATE(), GETDATE(), 1)
GO


-- 客户信息表里经常更新的
-- 2019-11-22 
-- 系统启动时要初始化本表信息!
-- sID = ct_customer.sID
CREATE TABLE dt_customer(
		sID				INT NOT NULL,
		-- 以下是经常更新的
		xLastHeartbeatTime	DATETIME NOT NULL,			-- 上次心跳时间
		xNextHeartbeatTime	DATETIME NOT NULL,			-- 下次心跳时间
		--
		xLastDailyTime		DATETIME NOT NULL,		-- 每天一次任务的最后时间  -- 两次每天一次定时任务时间间隔不能小于6小时
		xLastIntervalTime	DATETIME NOT NULL,		-- 最后定时任务的时间
		--
		xLastCmd		NVARCHAR(MAX),		-- 最后一次命令
		xLastCmdTime	DATETIME NOT NULL,			-- 最后命令时间
		xNextCmdTime	DATETIME NOT NULL,			-- 下次命令时间, 不能早于这个时间
		-- 主表通用
		sCreateTime  DATETIME NOT NULL,			
		sLastUpdate		DATETIME NOT NULL,
		sVersion  INT NOT NULL,
		CONSTRAINT pk_dt_customer PRIMARY KEY CLUSTERED (sID)
) ON DATAS

-- DROP TABLE dt_customer_heartbeatlog
-- 心跳命令日志
-- 主表  *从表  非主从表
-- 最后编辑:2019-10-31
CREATE TABLE dbo.dt_customer_heartbeatlog(
		sID				INT IDENTITY(1, 1),
		rCust_ID		INT,					-- 客户
		xCmd			VARCHAR(MAX),			-- 命令
		xCmdTime		DATETIME NOT NULL,				-- 命令生成(发送)时间
		CONSTRAINT pk_dt_customer_heartbeatlog PRIMARY KEY CLUSTERED (sID)
) ON TEMPDATAS

GO


-- 客户启用指定功能
-- 主表  *从表  非主从表
-- 最后编辑:2019-10-31
CREATE TABLE dbo.dt_customer_func(
		mID				INT NOT NULL,			-- 客户ID
		dID				INT NOT NULL,			-- 
		sIndex			INT NULL,
		rQuery_ID		INT,					-- dt_querytext.sID
		xStatus			INT,					-- 0禁用, 1启用
		CONSTRAINT pk_dt_customer_func PRIMARY KEY CLUSTERED (mID, dID)
) ON DATAS

GO


-- 联系人
-- *主表  从表  非主从表
-- 用于发送预警信息
-- 最后编辑:2019-10-31
-- 2019-11-22 确定不改ct
CREATE TABLE dbo.dt_contact(
		sID				INT NOT NULL,
		-- 
		xName			NVARCHAR(32) NOT NULL,		-- 显示名称
		--
		rCust_ID		INT,				-- 哪个客户的. 允许=0(不属于任何一个客户)
		xCompany		NVARCHAR(MAX),		-- 公司
		xPost			NVARCHAR(MAX),		-- 职务
		-- 预警发送相关
		xType			INT,				-- 预警发送方式 1手机 2微信 3邮箱
		xMobile			CHAR(11),			-- 手机
		xWXOpenID		NVARCHAR(MAX),		-- 微信OPENID
		xEMail			NVARCHAR(MAX),		-- 邮箱
		--
		xIsAdmin		INT,				-- 如果是管理员的话,默认所有客户的预警信息都会通知到
		-- 主表通用
		sCreateTime  DATETIME NOT NULL,			
		sLastUpdate		DATETIME NOT NULL,
		sVersion  INT NOT NULL,
		CONSTRAINT pk_dt_contact PRIMARY KEY CLUSTERED (sID)
) ON DATAS

GO
INSERT INTO dbo.ct_id (sID, xName, xValue, sCreateTime, sLastUpdate, sVersion) VALUES (4, N'dt_contact', 1, GETDATE(), GETDATE(), 1)
GO
-- 客户联系人
-- 主表  *从表  非主从表
-- 最后编辑:2019-10-31
CREATE TABLE dbo.dt_customer_contact(
		mID				INT NOT NULL,			-- 客户ID
		dID				INT NOT NULL,			-- 序号
		sIndex			INT NOT NULL,
		-- 
		rCont_ID		INT NOT NULL,
		xType			INT NOT NULL,			-- 预警发送方式 1手机 2微信 3邮箱
		CONSTRAINT pk_dt_customer_contact PRIMARY KEY CLUSTERED (mID, dID)
) ON DATAS
GO


-- 预警发送记录
-- 主表  从表  *非主从表
-- 除了主键外不建其他索引了,这个表多用于记录但基本上不会需要SELECT
-- 最后编辑:2019-10-31
/**
CREATE TABLE dbo.dt_contact_log(
		sID				INT IDENTITY(1, 1),			-- 序号
		-- 
		rCust_ID		INT,					-- 客户
		rCont_ID		INT,					-- 联系人
		xType			INT NOT NULL,			-- 预警发送方式 1手机 2微信 3邮箱
		xTitle			NVARCHAR(100),			-- 标题
		xContent		NVARCHAR(MAX),			-- 正文
		xDateTime		DATETIME NOT NULL,				-- 发送时间
		CONSTRAINT pk_dt_contact_log PRIMARY KEY CLUSTERED (sID)
)
**/
-- drop table dt_contact_log
CREATE TABLE dbo.dt_contact_log(
		sID				INT IDENTITY(1, 1),			-- 序号
		-- 
		rCust_ID		INT,					-- 客户
		rCont_ID		INT,					-- 联系人
		xType			INT NOT NULL,			-- 预警发送方式 1手机 2微信 3邮箱
		xUID			VARCHAR(MAX),
		xMessage		NVARCHAR(MAX),
		xResult			NVARCHAR(MAX),			-- 正文
		xDateTime		DATETIME NOT NULL,				-- 发送时间
		-- 主表通用
		sCreateTime  DATETIME NOT NULL,			
		sLastUpdate		DATETIME NOT NULL,
		sVersion  INT NOT NULL,
		CONSTRAINT pk_dt_contact_log PRIMARY KEY CLUSTERED (sID)
) ON TEMPDATAS
GO




-- SQL语句MD5
-- *主表  从表  非主从表
-- 将SQL语句转换为MD5以减少传输过程中的数据量
-- 此表暂不使用
CREATE TABLE dbo.dt_sqltext(
		sID				INT NOT NULL,
		-- 
		xMD5			CHAR(32) NOT NULL,			-- SQL全文的MD5
		xKey			CHAR(100) NOT NULL,			-- 前100个字符
		xText			NVARCHAR(MAX) NOT NULL,		-- SQL全文 如果超过8K则只存前8K
		--
		xIsStop			INT NOT NULL DEFAULT 0,		-- 1时不再使用(不再推送给客户端)
		-- 主表通用
		sCreateTime  DATETIME NOT NULL,			
		sLastUpdate		DATETIME NOT NULL,
		sVersion  INT NOT NULL,
		CONSTRAINT pk_dt_sqltext PRIMARY KEY CLUSTERED (sID)
) ON DATAS

GO
INSERT INTO dbo.ct_id (sID, xName, xValue, sCreateTime, sLastUpdate, sVersion) VALUES (5, N'dt_sqltext', 1, GETDATE(), GETANSINULL(), 1)
GO
CREATE NONCLUSTERED INDEX idx_dt_sqltext_cmd5 ON dbo.dt_sqltext (xMD5)
GO

CREATE NONCLUSTERED INDEX idx_dt_sqltext_xkey ON dbo.dt_sqltext (xkey)
GO




-- DROP TABLE dt_query
-- 任务的SQL语句
-- *主表  从表  非主从表
-- 传送给客户端来执行的语句
-- 每月一次,是在每月1号凌晨3点
-- 每周一次,是在每周一凌晨3点
-- 每天一次,是在每天凌晨3点
-- sID范围:
-- 与间隔有关,ID一共使用5位数, 其中最前面1位数=xInterval,后面4位是序号,这样支持快捷SELECT
CREATE TABLE dbo.dt_query(
		sID				INT NOT NULL,		-- 手动指定
		--
		xName			NVARCHAR(MAX) NOT NULL,		-- 名称
		xPath			VARCHAR(MAX) NOT NULL,		-- 服务端的接口 CONTROLLER的路径, 接受上报数据的基础路径, 包括地址
		xInterval		INT NOT NULL,				-- 间隔. 1:手动执行, 2:每月一次, 3:每周一次, 4:每天一次, 5:每小时一次, 6:每10分钟一次, 7:每5分钟一次, 8:每分钟一次, 9:每次启动客户端时一次
		xTableName		VARCHAR(200) NOT NULL,		-- 数据保存到哪个表
		xType			INT NOT NULL,				-- 类型. 1:查询类; 2:管理类
		xText			VARCHAR(MAX) NOT NULL,		-- SQL语句
		xIDIndex		INT NOT NULL,				-- ct_id.sID, 获取ID用的
		xIsPreTime		INT NOT NULL DEFAULT 0,
		xIsPreSID		INT NOT NULL DEFAULT 0,
		xIsOK			INT  NOT NULL DEFAULT 1,		-- 1:启用, 其他: 禁用
		xMD5			CHAR(32) NOT NULL,			-- SQL语句的MD5
		-- 主表通用
		sCreateTime  DATETIME NOT NULL,			
		sLastUpdate		DATETIME NOT NULL,
		sVersion  INT NOT NULL,
		CONSTRAINT pk_dt_query PRIMARY KEY CLUSTERED (sID)
) ON DATAS

GO

-- 所有查询记录全部使用主表!不再使用明细表来保存!

-- 临时指定给客户端的任务
-- 注意, 这里的任务都是一次性的
-- *主表  从表  非主从表
-- 2019-11-23 不建索引是因为按理来说这里的行数很少,不必要索引
CREATE TABLE dbo.dt_schedule(
		sID				INT NOT NULL,		-- 生成任务时就需要生成一个id
		--
		rCust_ID		INT NOT NULL,		-- 给哪个客户
		xDateTime		DATETIME NOT NULL,	-- 什么时候开始执行(超过这个时间后第一次心跳时会返回给客户端)
		xType			INT NOT NULL,				-- 1查询 2管理
		rQuery_ID		INT NOT NULL,				-- dt_query.sID
		--
		xStatus			INT NOT NULL,				-- 1已创建,未通知客户端 / 2已通知客户端  / 3已完成
		-- 主表通用
		sCreateTime  DATETIME NOT NULL,			
		sLastUpdate		DATETIME NOT NULL,
		sVersion  INT NOT NULL,
		CONSTRAINT pk_dt_schedule PRIMARY KEY CLUSTERED (sID)
) ON DATAS

GO
INSERT INTO dbo.ct_id (sID, xName, xValue, sCreateTime, sLastUpdate, sVersion) VALUES (6, N'dt_schedule', 1, GETDATE(), GETDATE(), 1)
GO
CREATE TABLE dbo.dt_schedule_log(
		sID				INT NOT NULL,		-- 生成任务时就需要生成一个id
		--
		rCust_ID		INT NOT NULL,		-- 给哪个客户
		xDateTime		DATETIME NOT NULL,			-- 什么时候开始执行(超过这个时间后第一次心跳时会返回给客户端)
		xType			INT NOT NULL,				-- 1查询 2管理
		rQuery_ID		INT NOT NULL,				-- dt_query.sID
		--
		xStatus			INT NOT NULL,				-- 1已创建,未通知客户端 / 2已通知客户端  / 3已完成
		-- 主表通用
		sCreateTime  DATETIME NOT NULL,			
		sLastUpdate		DATETIME NOT NULL,
		sVersion  INT NOT NULL,
		CONSTRAINT pk_dt_schedule_log PRIMARY KEY CLUSTERED (sID)
) ON DATAS

GO


--  客户端任务执行记录
-- *主表  从表  非主从表
-- 传送给客户端来执行的语句
CREATE TABLE dbo.dt_task(
		sID				INT NOT NULL,		-- 手动指定
		--
		rCust_ID		INT NOT NULL,		-- 客户
		--
		xDateTime		DATETIME NOT NULL,			-- 收到数据上报的时间
		xType			INT NOT NULL,				-- dt_query.xType
		rQuery_ID		INT NOT NULL,				-- dt_query.sID
		xCost			INT NOT NULL,				-- 客户端上报的耗时
		xEventTime		DATETIME NOT NULL,			-- 客户端收集数据的时间
		xRowQty			INT NOT NULL,				-- 本次收集数据的行数
		xSaveCost		INT NOT NULL,				-- 服务端保存耗费时间
		-- 主表通用
		sCreateTime  DATETIME NOT NULL,			
		sLastUpdate		DATETIME NOT NULL,
		sVersion  INT NOT NULL,
		CONSTRAINT pk_dt_task PRIMARY KEY CLUSTERED (sID)
) ON DATAS

GO


INSERT INTO dbo.ct_id (sID, xName, xValue, sCreateTime, sLastUpdate, sVersion) VALUES (1, N'dt_task', 1, GETDATE(), GETDATE(), 1)
GO

CREATE NONCLUSTERED INDEX idx_dt_task_rcust_id_rquery_id_xeventtime ON dbo.dt_task (rCust_ID, rQuery_ID, xEventTime)

GO


-- 01 TABLESIZE
-- 数据表及索引空间占用
-- 主表  *从表  非主从表
-- 每天一次
DROP TABLE dt_tablesize
CREATE TABLE dbo.dt_tablesize(
		sID					INT NOT NULL,
		rTask_ID			INT NOT NULL,
		rCust_ID			INT NOT NULL,		-- 客户
		xEventTime			BIGINT NOT NULL,
		--
		--xObjectID			INT NOT NULL,				-- 数据表的ID
		xTableName			NVARCHAR(200) NOT NULL,		-- 表名
		xRowQty				BIGINT NOT NULL,				-- 行数
		xDataSize			MONEY NOT NULL,				-- 数据表占用空间MB
		xIndexSize			MONEY,				-- 索引占用空间MB
		xIndexRate			MONEY,				-- 索引占用空间比例
		-- xIndexSeekQty		BIGINT,				-- 索引查找次数
		-- xIndexScanQty		BIGINT,				-- 索引扫描次数
		-- 全表扫描次数?
		CONSTRAINT pk_dt_tablesize PRIMARY KEY CLUSTERED (sID),
		INDEX idx_dt_tablesize_xtablename NONCLUSTERED(xTableName)
) ON DATAS

GO

INSERT INTO dbo.ct_id (sID, xName, xValue, sCreateTime, sLastUpdate, sVersion) VALUES (8, N'dt_tablesize_temp', 1, GETDATE(), GETDATE(), 1)
GO


-- temp
drop table dt_tablesize_temp
CREATE TABLE dbo.dt_tablesize_temp(
		sID					INT NOT NULL,
		rTask_ID  INT NOT NULL,
		rCust_ID			INT NOT NULL,		-- 客户
		xEventTime			BIGINT NOT NULL,
		--
		--xObjectID			INT,				-- 数据表的ID
		xTableName			NVARCHAR(MAX) NOT NULL,		-- 表名
		xRowQty				BIGINT NOT NULL,				-- 行数
		xDataSize			MONEY NOT NULL,				-- 数据表占用空间MB
		xIndexSize			MONEY,				-- 索引占用空间MB
		xIndexRate			MONEY,				-- 索引占用空间比例
		--xIndexSeekQty		BIGINT,				-- 索引查找次数
		--xIndexScanQty		BIGINT,				-- 索引扫描次数
		-- 全表扫描次数?
		CONSTRAINT pk_dt_tablesize_temp PRIMARY KEY CLUSTERED (sID)
) ON TEMPDATAS

GO
-- 02 indexinfo
-- 索引使用情况
-- 主表  *从表  非主从表
-- 每天一次
drop table dt_indexinfo
CREATE TABLE dbo.dt_indexinfo(
		sID					INT NOT NULL,
		rTask_ID  INT NOT NULL,
		rCust_ID			INT NOT NULL,		-- 客户
		xEventTime			BIGINT NOT NULL,
		--
		--xDatabaseName		NVARCHAR(MAX) NOT NULL,		-- 数据库名
		--xSchemaName			NVARCHAR(MAX) NOT NULL,		-- 
		--xTableObjectID		INT NOT NULL,
		xTableName			NVARCHAR(200) NOT NULL,
		xIndexID			INT NOT NULL,
		xIndexName			NVARCHAR(200) NOT NULL,		-- 索引名
		xUpdateQty			BIGINT,				-- 索引更新次数
		xTotalUseQty		BIGINT,				-- 总使用次数
		xMaintenanceCost	BIGINT,				-- 维护代价 (使用更新次数-次数) 越大表明代价越高
		xSystemUseQty		BIGINT,				-- 
		xFragmentationRate	MONEY,				-- 碎片率
		xStatisticsLastUpdate	BIGINT,		-- 统计信息最后更新
		xOldRowCount		BIGINT,				-- 上次更新统计信息时的行数
		xChangeRowCount		BIGINT,				-- 上次更新统计信息后变更的行数
		xChangeRate			MONEY,
		CONSTRAINT pk_dt_indexinfo PRIMARY KEY CLUSTERED (sID),
		--INDEX idx_dt_indexinfo_xtablename NONCLUSTERED (xTableName),
		INDEX idx_dt_indexinfo_xindexname NONCLUSTERED (xIndexName)
) ON DATAS

GO

INSERT INTO dbo.ct_id (sID, xName, xValue, sCreateTime, sLastUpdate, sVersion) VALUES (9, N'dt_indexinfo_temp', 1, GETDATE(), GETDATE(), 1)
GO

-- TEMP
drop table dt_indexinfo_temp
CREATE TABLE dbo.dt_indexinfo_temp(
		sID					INT NOT NULL,
		rTask_ID  INT NOT NULL,
		rCust_ID			INT NOT NULL,		-- 客户
		xEventTime			BIGINT NOT NULL,
		--
		--xDatabaseName		NVARCHAR(MAX),		-- 数据库名
		--xSchemaName			NVARCHAR(MAX),		-- 
		--xTableObjectID		BIGINT,
		xTableName			NVARCHAR(MAX) NOT NULL,
		xIndexID			INT NOT NULL,
		xIndexName			NVARCHAR(MAX) NOT NULL,		-- 索引名
		xUpdateQty			BIGINT,				-- 索引更新次数
		xTotalUseQty		BIGINT,				-- 总使用次数
		xMaintenanceCost	BIGINT,				-- 维护代价 (使用更新次数-次数) 越大表明代价越高
		xSystemUseQty		BIGINT,				-- 
		xFragmentationRate	MONEY,				-- 碎片率
		xStatisticsLastUpdate	BIGINT,		-- 统计信息最后更新
		xOldRowCount		BIGINT,				-- 上次更新统计信息时的行数
		xChangeRowCount		BIGINT,				-- 上次更新统计信息后变更的行数
		xChangeRate			MONEY,
		CONSTRAINT pk_dt_indexinfo_temp PRIMARY KEY CLUSTERED (sID)
) ON TEMPDATAS

GO


-- 03 indexmissing
-- 缺失的索引
-- 主表  *从表  非主从表
-- 每天一次
drop table dt_indexmissing
CREATE TABLE dbo.dt_indexmissing(
		sID					INT NOT NULL,
		rTask_ID  INT NOT NULL,
		rCust_ID			INT NOT NULL,		-- 客户
		xEventTime			BIGINT NOT NULL,
		--
		xTableName			NVARCHAR(200) NOT NULL,
		xTableCost			BIGINT,
		xAvgUserImpact		MONEY,
		xEqualityColumns	NVARCHAR(MAX),
		xInequalityColumns	NVARCHAR(MAX),
		xIncudedColumns		NVARCHAR(MAX),
		--
		CONSTRAINT pk_dt_indexmissing PRIMARY KEY CLUSTERED (sID),
		INDEX idx_dt_indexmissing_xtablename NONCLUSTERED(xTableName)
) ON DATAS

GO

INSERT INTO dbo.ct_id (sID, xName, xValue, sCreateTime, sLastUpdate, sVersion) VALUES (10, N'dt_indexmissing_temp', 1, GETDATE(), GETDATE(), 1)
GO

-- TEMP
drop table dt_indexmissing_temp
CREATE TABLE dbo.dt_indexmissing_temp(
		sID					INT NOT NULL,
		rTask_ID  INT NOT NULL,
		rCust_ID			INT NOT NULL,		-- 客户
		xEventTime			BIGINT NOT NULL,
		--
		xTableName			NVARCHAR(MAX) NOT NULL,
		xTableCost			BIGINT,
		xAvgUserImpact		MONEY,
		xEqualityColumns	NVARCHAR(MAX),
		xInequalityColumns	NVARCHAR(MAX),
		xIncudedColumns		NVARCHAR(MAX),
		--
		CONSTRAINT pk_dt_indexmissing_temp PRIMARY KEY CLUSTERED (sID)
) ON TEMPDATAS

GO

-- 废弃这个查询
/**
-- 04 sessionlock
-- 线程锁表
-- 主表  *从表  非主从表
CREATE TABLE dbo.dt_sessionlock(
		sID					INT NOT NULL,
		rTask_ID  INT NOT NULL,
		rCust_ID			INT NOT NULL,		-- 客户
		xEventTime			BIGINT NOT NULL,
		--
		sPID				INT,
		xTableName			NVARCHAR(MAX),
		xTableCost			BIGINT,
		xMode				NVARCHAR(60),
		xType				NVARCHAR(60),
		xStatus				NVARCHAR(60),
		--
		CONSTRAINT pk_dt_sessionlock PRIMARY KEY CLUSTERED (sID)
)

GO

INSERT INTO dbo.ct_id (sID, xName, xValue, sCreateTime, sLastUpdate, sVersion) VALUES (7, N'dt_sessionlock', 1)
GO

-- TEMP
CREATE TABLE dbo.dt_sessionlock_temp(
		sID					INT NOT NULL,
		rTask_ID  INT NOT NULL,
		rCust_ID			INT NOT NULL,		-- 客户
		xEventTime			BIGINT NOT NULL,
		--
		sPID				INT,
		xTableName			NVARCHAR(MAX),
		xTableCost			BIGINT,
		xMode				NVARCHAR(60),
		xType				NVARCHAR(60),
		xStatus				NVARCHAR(60),
		--
		CONSTRAINT pk_dt_sessionlock_temp PRIMARY KEY CLUSTERED (sID)
)
**/
GO

--DROP TABLE dt_querying
-- 05 querying
-- 正在查询的语句
-- 主表  *从表  非主从表
drop table dt_querying
CREATE TABLE dbo.dt_querying(
		sID					INT NOT NULL,
		rTask_ID  INT NOT NULL,
		rCust_ID			INT NOT NULL,		-- 客户
		xEventTime			BIGINT NOT NULL,
		--
		sPID				INT NOT NULL,
		eCID				INT NOT NULL,
		--xDatabaseName		NVARCHAR(MAX),
		--xUsername			NVARCHAR(MAX),
		xStatus				NVARCHAR(MAX),
		xWait				NVARCHAR(MAX),
		xIndividualQuery	NVARCHAR(MAX), 
		xParentQuery		NVARCHAR(MAX), 
		xProgram			NVARCHAR(MAX), 
		xHostName			NVARCHAR(MAX), 
		xDomain				NVARCHAR(MAX), 
		xStartTime			BIGINT, 
		xRequestID			INT, 
		xCompletePercent	MONEY, 
		xClientNetAddress	NVARCHAR(MAX), 
		xLocalNetAddress	NVARCHAR(MAX), 
		xCommand			NVARCHAR(MAX), 
		xBlockingSessionID	INT, 
		xWaitType			NVARCHAR(MAX), 
		xWaitTime			MONEY, 
		xWaitResource		NVARCHAR(MAX), 
		xPhysicalReadQty	BIGINT, 
		xWriteQty			BIGINT, 
		xLogicalReadQty		BIGINT, 
		xRowQty				BIGINT, 
		xCPUTime			INT, 
		xCost				INT,
		xProcName			NVARCHAR(MAX),			-- 分析出来是哪个存储过程的
		xTag				INT,
		xIsCheck			INT,
		--
		CONSTRAINT pk_dt_querying PRIMARY KEY CLUSTERED (sID)
) ON DATAS

GO

INSERT INTO dbo.ct_id (sID, xName, xValue, sCreateTime, sLastUpdate, sVersion) VALUES (11, N'dt_querying_temp', 1, GETDATE(), GETDATE(), 1)
GO

-- DROP TABLE dt_querying_temp
-- TEMP
drop table dt_querying_temp
CREATE TABLE dbo.dt_querying_temp(
		sID					INT NOT NULL,
		rTask_ID  INT NOT NULL,
		rCust_ID			INT NOT NULL,		-- 客户
		xEventTime			BIGINT NOT NULL,
		--
		sPID				INT NOT NULL,
		eCID				INT NOT NULL,
		--xDatabaseName		NVARCHAR(MAX),
		--xUsername			NVARCHAR(MAX),
		xStatus				NVARCHAR(MAX),
		xWait				NVARCHAR(MAX),
		xIndividualQuery	NVARCHAR(MAX), 
		xParentQuery		NVARCHAR(MAX), 
		xProgram			NVARCHAR(MAX), 
		xHostName			NVARCHAR(MAX), 
		xDomain				NVARCHAR(MAX), 
		xStartTime			BIGINT NOT NULL, 
		xRequestID			INT, 
		xCompletePercent	MONEY, 
		xClientNetAddress	NVARCHAR(MAX), 
		xLocalNetAddress	NVARCHAR(MAX), 
		xCommand			NVARCHAR(MAX), 
		xBlockingSessionID	INT, 
		xWaitType			NVARCHAR(MAX), 
		xWaitTime			MONEY, 
		xWaitResource		NVARCHAR(MAX), 
		xPhysicalReadQty	BIGINT, 
		xWriteQty			BIGINT, 
		xLogicalReadQty		BIGINT, 
		xRowQty				BIGINT, 
		xCPUTime			INT, 
		xCost				INT,
		xProcName			NVARCHAR(MAX),			-- 分析出来是哪个存储过程的
		xTag				INT,
		xIsCheck			INT,
		--
		CONSTRAINT pk_dt_querying_temp PRIMARY KEY CLUSTERED (sID)
) ON TEMPDATAS

GO








-- 06 timeout
-- 耗时长的语句
-- 主表  *从表  非主从表
drop table dt_timeout
CREATE TABLE dbo.dt_timeout(
		sID					INT NOT NULL,
		rTask_ID  INT NOT NULL,
		rCust_ID			INT NOT NULL,		-- 客户
		xEventTime			BIGINT NOT NULL,
		--
		xTotalDuration			BIGINT,
		xCPUPercent				MONEY,
		xWaitingPercent			MONEY,
		xExecQty				BIGINT,
		xAvgDuration			INT,
		xIndividualQuery		NVARCHAR(MAX),
		xParentQuery			NVARCHAR(MAX),
		xCreateTime				BIGINT,
		xLastExecTime			BIGINT,
		xMinWorkerTime			INT,			-- 最小执行时间, 单位:毫秒
		xMaxWorkerTime			INT,			-- 单位毫秒
		xProcName			NVARCHAR(MAX),			-- 分析出来是哪个存储过程的
		--
		CONSTRAINT pk_dt_timeout PRIMARY KEY CLUSTERED (sID)
) ON DATAS

GO

INSERT INTO dbo.ct_id (sID, xName, xValue, sCreateTime, sLastUpdate, sVersion) VALUES (12, N'dt_timeout_temp', 1, GETDATE(), GETDATE(), 1)
GO

-- TEMP
drop table dt_timeout_temp
CREATE TABLE dbo.dt_timeout_temp(
		sID					INT NOT NULL,
		rTask_ID  INT NOT NULL,
		rCust_ID			INT NOT NULL,		-- 客户
		xEventTime			BIGINT NOT NULL,
		--
		xTotalDuration			BIGINT,
		xCPUPercent				MONEY,
		xWaitingPercent			MONEY,
		xExecQty				BIGINT,
		xAvgDuration			INT,
		xIndividualQuery		NVARCHAR(MAX),
		xParentQuery			NVARCHAR(MAX),
		xCreateTime				BIGINT,
		xLastExecTime			BIGINT,
		xMinWorkerTime			INT,			-- 最小执行时间, 单位:毫秒
		xMaxWorkerTime			INT,			-- 单位毫秒
		xProcName			NVARCHAR(MAX),			-- 分析出来是哪个存储过程的
		--
		CONSTRAINT pk_dt_timeout_temp PRIMARY KEY CLUSTERED (sID)
) ON TEMPDATAS

GO



-- 07 cpuinfo
-- CPU使用情况
-- 主表  *从表  非主从表
drop table dt_cpuinfo
CREATE TABLE dbo.dt_cpuinfo(
		sID					INT NOT NULL,
		rTask_ID  INT NOT NULL,
		rCust_ID			INT NOT NULL,		-- 客户
		--
		xEventTime					BIGINT, 
		xSQLServerProcessCPUCost	MONEY, 
		xSystemIdleProcess			MONEY, 
		xOtherProcessCPUCost		MONEY, 
		--
		CONSTRAINT pk_dt_cpuinfo PRIMARY KEY CLUSTERED (sID)
) ON DATAS

GO

INSERT INTO dbo.ct_id (sID, xName, xValue, sCreateTime, sLastUpdate, sVersion) VALUES (13, N'dt_cpuinfo_temp', 1, GETDATE(), GETDATE(), 1)
GO

-- TEMP
drop table dt_cpuinfo_temp
CREATE TABLE dbo.dt_cpuinfo_temp(
		sID					INT NOT NULL,
		rTask_ID  INT NOT NULL,
		rCust_ID			INT NOT NULL,		-- 客户
		--
		xEventTime					BIGINT, 
		xSQLServerProcessCPUCost	MONEY, 
		xSystemIdleProcess			MONEY, 
		xOtherProcessCPUCost		MONEY, 
		--
		CONSTRAINT pk_dt_cpuinfo_temp PRIMARY KEY CLUSTERED (sID)
) ON TEMPDATAS

GO


-- 08 planinfo
-- 执行计划命中情况
-- 主表  *从表  非主从表
drop table dt_planinfo
CREATE TABLE dbo.dt_planinfo(
		sID					INT NOT NULL,
		rTask_ID  INT NOT NULL,
		rCust_ID			INT NOT NULL,		-- 客户
		xEventTime			BIGINT NOT NULL,
		--
		xName				NVARCHAR(MAX), 
		xBucketCount		INT, 
		xBucketsUseCount	INT, 
		xHitCount			INT, 
		xMissesCount		INT, 
		--
		CONSTRAINT pk_dt_planinfo PRIMARY KEY CLUSTERED (sID)
) ON DATAS

GO

INSERT INTO dbo.ct_id (sID, xName, xValue, sCreateTime, sLastUpdate, sVersion) VALUES (14, N'dt_planinfo_temp', 1, GETDATE(), GETDATE(), 1)
GO

-- TEMP
drop table dt_planinfo_temp
CREATE TABLE dbo.dt_planinfo_temp(
		sID					INT NOT NULL,
		rTask_ID  INT NOT NULL,
		rCust_ID			INT NOT NULL,		-- 客户
		xEventTime			BIGINT NOT NULL,
		--
		xName				NVARCHAR(MAX), 
		xBucketCount		INT, 
		xBucketsUseCount	INT, 
		xHitCount			INT, 
		xMissesCount		INT, 
		--
		CONSTRAINT pk_dt_planinfo_temp PRIMARY KEY CLUSTERED (sID)
) ON TEMPDATAS

GO





-- 09 convert
-- 隐式转换
-- 主表  *从表  非主从表
drop table dt_convert
CREATE TABLE dbo.dt_convert(
		sID					INT NOT NULL,
		rTask_ID  INT NOT NULL,
		rCust_ID			INT NOT NULL,		-- 客户
		xEventTime			BIGINT NOT NULL,
		--
		xSQLText			NVARCHAR(MAX), 
		xSchemaName			NVARCHAR(MAX), 
		xTableName			NVARCHAR(MAX), 
		xColumnName			NVARCHAR(MAX), 
		xConvertFrom		NVARCHAR(MAX), 
		xConvertFromLength	INT, 
		xConvertTo			NVARCHAR(MAX), 
		xConvertToLength	INT, 
		--
		CONSTRAINT pk_dt_convert PRIMARY KEY CLUSTERED (sID)
) ON DATAS

GO

INSERT INTO dbo.ct_id (sID, xName, xValue, sCreateTime, sLastUpdate, sVersion) VALUES (15, N'dt_convert_temp', 1, GETDATE(), GETDATE(), 1)
GO

-- TEMP
drop table dt_convert_temp
CREATE TABLE dbo.dt_convert_temp(
		sID					INT NOT NULL,
		rTask_ID  INT NOT NULL,
		rCust_ID			INT NOT NULL,		-- 客户
		xEventTime			BIGINT NOT NULL,
		--
		xSQLText			NVARCHAR(MAX), 
		xSchemaName			NVARCHAR(MAX), 
		xTableName			NVARCHAR(MAX), 
		xColumnName			NVARCHAR(MAX), 
		xConvertFrom		NVARCHAR(MAX), 
		xConvertFromLength	INT, 
		xConvertTo			NVARCHAR(MAX), 
		xConvertToLength	INT, 
		--
		CONSTRAINT pk_dt_convert_temp PRIMARY KEY CLUSTERED (sID)
) ON TEMPDATAS

GO






-- 10 reportlog
-- 报表查询记录
-- 主表  *从表  非主从表
drop table dt_reportlog_temp
CREATE TABLE dbo.dt_reportlog(
		sID					INT NOT NULL,
		rTask_ID  INT NOT NULL,
		rCust_ID			INT NOT NULL,		-- 客户
		xEventTime			BIGINT NOT NULL,
		--
		xFormClass			NVARCHAR(MAX) NOT NULL,
		xFormCaption		NVARCHAR(MAX) NOT NULL,
		xQueryName			NVARCHAR(500) NOT NULL,
		xQueryParamList		NVARCHAR(MAX) NULL,
		rUser_ID			INT NULL,
		xPC					NVARCHAR(100) NULL,
		xQueryTime			BIGINT NULL,
		xDuration			MONEY NULL,
		xNote				NVARCHAR(MAX) NULL,
		--
		CONSTRAINT pk_dt_reportlog PRIMARY KEY CLUSTERED (sID),
		INDEX idx_dt_reportlog NONCLUSTERED (xQueryName)
) ON DATAS

GO

INSERT INTO dbo.ct_id (sID, xName, xValue, sCreateTime, sLastUpdate, sVersion) VALUES (16, N'dt_reportlog_temp', 1, GETDATE(), GETDATE(), 1)
GO

-- TEMP
drop table dt_reportlog_temp
CREATE TABLE dbo.dt_reportlog_temp(
		sID					INT NOT NULL,
		rTask_ID  INT NOT NULL,
		rCust_ID			INT NOT NULL,		-- 客户
		xEventTime			BIGINT NOT NULL,
		--
		xFormClass			NVARCHAR(MAX)  NOT NULL,
		xFormCaption		NVARCHAR(MAX)  NOT NULL,
		xQueryName			NVARCHAR(500)  NOT NULL,
		xQueryParamList		NVARCHAR(MAX) NULL,
		rUser_ID			INT NULL,
		xPC					NVARCHAR(100) NULL,
		xQueryTime			BIGINT NULL,
		xDuration			MONEY NULL,
		xNote				NVARCHAR(MAX) NULL,
		--
		CONSTRAINT pk_dt_reportlog_temp PRIMARY KEY CLUSTERED (sID)
) ON TEMPDATAS

GO

-- 11 serverinfo
-- 系统信息表
-- 主表  *从表  非主从表
drop table dt_customer_serverinfo
CREATE TABLE dbo.dt_customer_serverinfo(
		sID					INT NOT NULL,
		rTask_ID  INT NOT NULL,
		rCust_ID			INT NOT NULL,		-- 客户
		xEventTime			BIGINT NOT NULL,
		--
		xPhysicalCPUQty			INT,			-- 物理CPU数
		xLogicCPUQty			INT,	-- 逻辑CPU数
		xCoresQty				INT,		-- 核心数
		xPhysicalMemorySize		MONEY,	-- 物理内存数
		xUnusedPhysicalMemory	MONEY,	-- 未使用
		xUsedPhysicalMemory		MONEY,	-- 已使用
		xSystemCacheSize		MONEY,	-- 
		xDiskCapacity			NVARCHAR(MAX),		-- 磁盘使用情况, 用JSON
		xSystemInfo				NVARCHAR(MAX),			-- 操作系统
		xLanaguage				NVARCHAR(MAX),			-- 语言
		--
		CONSTRAINT pk_dt_customer_serverinfo PRIMARY KEY CLUSTERED (sID)
) ON DATAS

GO

INSERT INTO dbo.ct_id (sID, xName, xValue, sCreateTime, sLastUpdate, sVersion) VALUES (17, N'dt_customer_serverinfo_temp', 1, GETDATE(), GETDATE(), 1)
GO

-- TEMP
drop table dt_customer_serverinfo_temp
CREATE TABLE dbo.dt_customer_serverinfo_temp(
		sID					INT NOT NULL,
		rTask_ID  INT NOT NULL,
		rCust_ID			INT NOT NULL,		-- 客户
		xEventTime			BIGINT NOT NULL,
		--
		xPhysicalCPUQty			INT,			-- 物理CPU数
		xLogicCPUQty			INT,	-- 逻辑CPU数
		xCoresQty				INT,		-- 核心数
		xPhysicalMemorySize		MONEY,	-- 物理内存数
		xUnusedPhysicalMemory	MONEY,	-- 未使用
		xUsedPhysicalMemory		MONEY,	-- 已使用
		xSystemCacheSize		MONEY,	-- 
		xDiskCapacity			NVARCHAR(MAX),		-- 磁盘使用情况, 用JSON
		xSystemInfo				NVARCHAR(MAX),			-- 操作系统
		xLanaguage				NVARCHAR(MAX),			-- 语言
		--
		CONSTRAINT pk_dt_customer_serverinfo_temp PRIMARY KEY CLUSTERED (sID)
) ON TEMPDATAS

GO
-- DROP TABLE dt_reportjam_TEMP
-- 12 reportjam
-- 报表卡死记录
-- 主表  *从表  非主从表
drop table dt_reportjam
CREATE TABLE dbo.dt_reportjam(
		sID					INT NOT NULL,
		rTask_ID  INT NOT NULL,
		rCust_ID			INT NOT NULL,		-- 客户
		xEventTime			BIGINT NOT NULL,
		--
		xFormClass			NVARCHAR(MAX)  NOT NULL,
		xFormCaption		NVARCHAR(MAX)  NOT NULL,
		xQueryName			NVARCHAR(MAX)  NOT NULL,
		xQueryParamList		NVARCHAR(MAX) NULL,
		rUser_ID			INT NULL,
		xPC					NVARCHAR(100) NULL,
		xQueryTime			BIGINT,
		xDuration			MONEY NULL,
		xNote				NVARCHAR(MAX) NULL,
		xTag				INT,
		--
		CONSTRAINT pk_dt_reportjam PRIMARY KEY CLUSTERED (sID)
) ON DATAS

GO

INSERT INTO dbo.ct_id (sID, xName, xValue, sCreateTime, sLastUpdate, sVersion) VALUES (18, N'dt_reportjam_temp', 1, GETDATE(), GETDATE(), 1)
GO

-- TEMP
drop table dt_reportjam_temp
CREATE TABLE dbo.dt_reportjam_temp(
		sID					INT NOT NULL,
		rTask_ID  INT NOT NULL,
		rCust_ID			INT NOT NULL,		-- 客户
		xEventTime			BIGINT NOT NULL,
		--
		xFormClass			NVARCHAR(MAX)  NOT NULL,
		xFormCaption		NVARCHAR(MAX)  NOT NULL,
		xQueryName			NVARCHAR(MAX)  NOT NULL,
		xQueryParamList		NVARCHAR(MAX) NULL,
		rUser_ID			INT NULL,
		xPC					NVARCHAR(100) NULL,
		xQueryTime			BIGINT NULL,
		xDuration			MONEY NULL,
		xNote				NVARCHAR(MAX) NULL,
		xTag				INT,
		--
		CONSTRAINT pk_dt_reportjam_temp PRIMARY KEY CLUSTERED (sID)
) ON TEMPDATAS

GO

-- 系统设定表
CREATE TABLE dbo.dt_systemdata(
		sID				INT NOT NULL,
		--
		xName			NVARCHAR(MAX),
		xValue			NVARCHAR(MAX),
		xInt			INT,
		xFloat			FLOAT,
		xLong			BIGINT,
		--
		sCreateTime  DATETIME NOT NULL,
		sLastUpdate		DATETIME NOT NULL,
		sVersion  INT NOT NULL,
		CONSTRAINT pk_dt_systemdata PRIMARY KEY CLUSTERED (sID)
) ON [PRIMARY]

GO














